home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1994 / MacHack 1994.toast / MacHack™94 / Miscellaneous / Randy Thelen / ThreadedSort / Lib / Preferences.cp < prev    next >
Encoding:
Text File  |  1994-06-26  |  2.1 KB  |  85 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        Preferences.cp
  3.  
  4.     Contains:    minimalist preference file routines
  5.                 
  6.     Written by: Dave Falkenburg
  7.  
  8.     Copyright:    © 1993-94 by Dave Falkenburg, all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.      
  12.  */
  13.  
  14. #ifdef    SystemSevenOrLater
  15. #undef    SystemSevenOrLater
  16. #endif
  17. #define    SystemSevenOrLater    1
  18.  
  19. #include    <Types.h>
  20. #include    <Files.h>
  21. #include    <Folders.h>
  22. #include    <Resources.h>
  23. #include     <Processes.h>
  24. #include    <TextUtils.h>
  25.  
  26. #include    "AppLib.h"
  27.  
  28. short
  29. OpenPreferencesResFile(void)
  30.     {
  31.     OSErr            err;
  32.     short            prefsVRefNum;
  33.     long            prefsDirID;
  34.     HParamBlockRec    pb;
  35.     short            prefsRefNum;
  36.     Str255            prefsFileName;
  37.     
  38.     err = FindFolder(kOnSystemDisk,kPreferencesFolderType,kCreateFolder,&prefsVRefNum,&prefsDirID);
  39.  
  40.     if (err != noErr)    //    Couldn’t find preferences folder, something is wrong
  41.         return(-1);
  42.  
  43.     GetIndString(prefsFileName,kPreferencesFileStrings,kPreferencesFileName);
  44.  
  45.     //    Try openning the Preferences file
  46.             
  47.     prefsRefNum = HOpenResFile(prefsVRefNum,prefsDirID,prefsFileName,fsRdWrPerm); 
  48.     if (prefsRefNum == -1)
  49.         {
  50.         //    Get the application’s creator
  51.         
  52.         ProcessInfoRec        processInfo;
  53.         ProcessSerialNumber    currentProc = {0,kCurrentProcess};
  54.         
  55.         processInfo.processInfoLength = sizeof(processInfo);
  56.         processInfo.processName = nil;
  57.         processInfo.processAppSpec = nil;
  58.         
  59.         (void) GetProcessInformation(¤tProc,&processInfo);
  60.         
  61.         //    Couldn’t open prefs file, try making a new one
  62.         
  63.         HCreateResFile(prefsVRefNum,prefsDirID,prefsFileName);
  64.         pb.fileParam.ioNamePtr = prefsFileName;
  65.         pb.fileParam.ioVRefNum = prefsVRefNum;
  66.         pb.fileParam.ioDirID = prefsDirID;
  67.         pb.fileParam.ioFDirIndex = 0;
  68.         err = PBHGetFInfo(&pb,false);
  69.         
  70.         pb.fileParam.ioNamePtr = prefsFileName;
  71.         pb.fileParam.ioVRefNum = prefsVRefNum;
  72.         pb.fileParam.ioDirID = prefsDirID;
  73.         pb.fileParam.ioFDirIndex = 0;
  74.         pb.fileParam.ioFlFndrInfo.fdType = 'PREF';
  75.         pb.fileParam.ioFlFndrInfo.fdCreator = processInfo.processSignature;
  76.         pb.fileParam.ioFlFndrInfo.fdFlags = 0;
  77.         err = PBHSetFInfo(&pb,false); 
  78.     
  79.         if (ResError() == noErr)    //    Try opening the newly created prefs file if we made it
  80.             prefsRefNum = HOpenResFile(prefsVRefNum,prefsDirID,prefsFileName,fsRdWrPerm);            
  81.         }
  82.         
  83.     return(prefsRefNum);
  84.     }
  85.